import { defineStore } from 'pinia'
import { useRouter } from 'vue-router'
import { useDbStore } from './db.js'
import dbUtils from '../libs/util.strotage.js'
import { authLogin, authLoginOut, authCheckQrCode } from '../api/modules/api.auth'
import { ZyNotification } from '../libs/util.toast'

export const useAuthStore = defineStore('auth', () => {
    const router = useRouter()
    const db = useDbStore()

    async function logout() {
        // 执行退出登录逻辑，例如清除用户凭证和重置用户状态等
        // ...
        return new Promise((resolve, reject) => {
            authLoginOut().then(res => {
                resolve()
                // 清除所有缓存
                db.removeAllInfo()
                // 导航到登录页或其他适当的页面
                location.href = import.meta.env.VITE_BASE_PATH;
            }).catch(err => {
                reject(err)
            })
        })
    }

    async function login(value) {
        // 执行登录逻辑
        return new Promise((resolve, reject) => {
            authLogin(value).then(res => {
                dbUtils.clear()
                dbUtils.set('token', res.data.token)
                dbUtils.set('account', res.data.account)
                dbUtils.set('userInfo', {
                    ...res.data.user
                })
                dbUtils.set('showLetter', res.data.showLetter)  // 是否展示引导信

                resolve(res)
            
            }).catch(err => {
                reject(err)
            })
        })
    }

    async function qrLogin(value) {
        // 执行登录逻辑
        return new Promise((resolve, reject) => {
            authCheckQrCode(value).then(res => {
                if (res.data.status == 1) {
                    dbUtils.clear()
                    dbUtils.set('token', res.data.token)
                    dbUtils.set('account', res.data.account)
                    dbUtils.set('userInfo', {
                        ...res.data.user
                    })

                    resolve(res)
                    ZyNotification.success(`欢迎: ${res.data.user.nickname}`)
                    router.replace('/personalSpace')
                }else  {
                    resolve(res)
                }

            }).catch(err => {
                reject(err)
            })
        })
    }

    // 获取用户的角色权限列表数据 并且存储本地
    async function setPerm(value) {
        dbUtils.set('perms', value)
    }

    return {
        setPerm,
        logout,
        login,
        qrLogin
    }
})
